/*
	Copyright 2008, 2009, 2010 Brightworks, Inc.
	
	This file is part of Language Mentor.
	
	Language Mentor is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.
	
	Language Mentor is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.
	
	You should have received a copy of the GNU General Public License
	along with Language Mentor.  If not, see <http://www.gnu.org/licenses/>.
*/
package com.langcollab.languagementor.controller
{
    import com.brightworks.util.Debug;
    import com.langcollab.languagementor.controller.audio.AudioController;
    import com.langcollab.languagementor.event.Event_ApplicationState;
    import com.langcollab.languagementor.model.MainModel;
    import com.langcollab.languagementor.vo.ModuleVersionVO;
    
    import flash.events.Event;
    
    import mx.collections.ArrayCollection;
    
    import org.swizframework.utils.commands.IEventAwareCommand;

    public class Command_ChangeCurrentModuleVersionIndex extends Command_Base implements IEventAwareCommand
    {
		[Inject]
		public var audioController:AudioController;
		[Inject]
		public var model:MainModel;

        // ****************************************************
        //
        //          Public Methods
        //
        // ****************************************************

		public function Command_ChangeCurrentModuleVersionIndex()
        {
            super();
        }

		public function execute():void
        {
            var newModuleVersionIndex:int           = Event_ApplicationState(event).newModuleVersionIndex;
            var playNow:Boolean                     = Event_ApplicationState(event).playNow;
            var newModuleVersionVO:ModuleVersionVO  = ModuleVersionVO(model.selectedModuleVersionsData[newModuleVersionIndex]);
			model.selectedModuleVersionIndex  = newModuleVersionIndex;
			model.selectedModuleVersionVO     = newModuleVersionVO;
            var chunkVOs:ArrayCollection = model.dataManager.getChunkVOsSortedByLocationInOrderFromModuleVersionVO(newModuleVersionVO);
			model.selectedModuleVersionChunksData = chunkVOs;
			var e:Event_ApplicationState = new Event_ApplicationState(Event_ApplicationState.CHANGE_CURRENT_CHUNK_INDEX);
			e.newChunkIndex = 0;
			dispatchEvent(e);
            if (playNow)
            {
				audioController.clearTempChunkSequenceStrategy();
				audioController.attemptToPlayOrResumeSelectedModuleVersion();
            }
        }
    }
}